<?php

/**
 * Description of RepoTratamiento
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class RepoTratamiento extends Repositorio
{

  function __construct()
  {
    $this->tabla = "tratamiento";
    $this->id = "idTratamiento";
  }

  function agregar(Tratamiento $tratamiento)
  {
    try
    {

      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "INSERT INTO " . $this->tabla . "(nombre, duracion, descripcion, precio, deshabilitado) values (";
      $query .= "'" . $tratamiento->getNombre() . "', ";
      $query .= $tratamiento->getDuracion() . ",";
      $query .= "'" . $tratamiento->getDescripcion() . "',";
      $query .= $tratamiento->getPrecio() . ", ";
      $query .= $tratamiento->getDeshabilitado() . ")";
      $result = $this->PostSQL($query);
      $id = $this->GetInsertedId();
      if ($result)
      {
        if ($tratamiento->getProductos() != null)
        {
          /* @var $producto Producto */
          foreach ($tratamiento->getProductos() as $producto)
          {
            $query = "INSERT INTO tratamiento_producto (tratamiento, producto) VALUES (";
            $query .= $id . ", " . $producto->getId() . ")";
            $result = $this->PostSQL($query);
          }
          if ($result)
          {
            /* @var $gabinete Gabinete */
            foreach ($tratamiento->getGabinetes() as $gabinete)
            {
              $query = "INSERT INTO tratamiento_gabinete (tratamiento, gabinete) VALUES (";
              $query .= $id . ", " . $gabinete->getId() . ")";
              $result = $this->PostSQL($query);
            }
          }
        }
      }
      if ($result)
      {
        $this->commitTransaction();
      } else
      {
        $this->rollbackTransaction();
      }
      $this->CloseDB($link);
      return $result;
    } catch (Exception $ex)
    {
      return $ex;
    }
  }

  function modificar(Tratamiento $tratamiento)
  {
    try
    {

      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "UPDATE " . $this->tabla . " SET ";
      $query .= "nombre = '" . $tratamiento->getNombre() . "', ";
      $query .= "duracion = " . $tratamiento->getDuracion() . ",";
      $query .= "descripcion = '" . $tratamiento->getDescripcion() . "',";
      $query .= "precio = " . $tratamiento->getPrecio() . ", ";
      $query .= "deshabilitado = " . $tratamiento->getDeshabilitado();
      $query .= " WHERE idTratamiento = " . $tratamiento->getId();
      $result = $this->PostSQL($query);
      if ($result)
      {
        $query = "DELETE FROM tratamiento_producto WHERE tratamiento = " . $tratamiento->getId();
        $result = $this->PostSQL($query);
      }
      if (is_array($tratamiento->getProductos()) && $result)
      {
        /* @var $producto Producto */
        foreach ($tratamiento->getProductos() as $producto)
        {
          if ($result)
          {
            $query = "INSERT INTO tratamiento_producto (tratamiento, producto) VALUES (";
            $query .= $tratamiento->getId();
            $query .= ", " . $producto->getId() . ")";
            $result = $this->PostSQL($query);
          }
        }
      }
      if ($result)
      {
        $query = "DELETE FROM tratamiento_gabinete WHERE tratamiento = " . $tratamiento->getId();
        $result = $this->PostSQL($query);
      }
      if (is_array($tratamiento->getGabinetes()) && $result)
      {
        /* @var $gabinete Gabinete */
        foreach ($tratamiento->getGabinetes() as $gabinete)
        {
          if ($result)
          {
            $query = "INSERT INTO tratamiento_gabinete (tratamiento, gabinete) VALUES (";
            $query .= $tratamiento->getId() . ", " . $gabinete->getId() . ")";
            $result = $this->PostSQL($query);
          }
        }
      }
      if ($result)
      {
        $this->commitTransaction();
      } else
      {
        $this->rollbackTransaction();
      }
      $this->CloseDB($link);
      return $result;
    } catch (Exception $ex)
    {
      return $ex;
    }
  }

  function buscar($id)
  {
    $link = $this->OpenDB();
    $query = parent::buscar($id);
    $tratamiento = new Tratamiento();

    $terapeutaTratamiento = $this->GetSQL('SELECT tratamiento, terapeuta FROM terapeuta_tratamiento WHERE tratamiento = ' . $query[0]->idTratamiento);
    $this->CloseDB($link);
    if ($terapeutaTratamiento != false)
    {
      $terapeutas = array();
      $sTerapeuta = new TerapeutaServicios();
      for ($i = 0; $i < count($terapeutaTratamiento); $i++)
      {
        $terapeuta = $sTerapeuta->buscar($terapeutaTratamiento[$i]->terapeuta);
        $terapeutas[$i] = $terapeuta;
      }
      $tratamiento->setTerapeutas($terapeutas);
    }
    $link = $this->OpenDB();
    $gabinetesTratamiento = $this->GetSQL('SELECT tratamiento, gabinete FROM tratamiento_gabinete WHERE tratamiento = ' . $query[0]->idTratamiento);
    $this->CloseDB($link);

    if ($gabinetesTratamiento != false)
    {
      $gabinetes = array();
      $sgabinete = new GabineteServicios();
      for ($i = 0; $i < count($gabinetesTratamiento); $i++)
      {
        $gabinete = $sgabinete->buscar($gabinetesTratamiento[$i]->gabinete);
        $gabinetes[$i] = $gabinete;
      }
      $tratamiento->setGabinetes($gabinetes);
    }
    $link = $this->OpenDB();
    $productosTratamiento = $this->GetSQL('SELECT tratamiento, producto FROM tratamiento_producto WHERE tratamiento = ' . $query[0]->idTratamiento);
    $this->CloseDB($link);
    if ($productosTratamiento != false)
    {
      $sproducto = new ProductoServicios();
      for ($i = 0; $i < count($productosTratamiento); $i++)
      {
        $producto = $sproducto->buscar($productosTratamiento[$i]->producto);
        $productos[$i] = $producto;
      }
      $tratamiento->setProductos($productos);
    }
    $tratamiento->setDescripcion($query[0]->descripcion);
    $tratamiento->setVersion($query[0]->version);
    $tratamiento->setDuracion($query[0]->duracion);
    $tratamiento->setId($query[0]->idTratamiento);
    $tratamiento->setNombre($query[0]->nombre);
    $tratamiento->setPrecio($query[0]->precio);

    return $tratamiento;
    $this->CloseDB($link);
  }

  function buscarTratamientoPorGabinete($idGabinete)
  {
    $link = $this->OpenDB();
    $tratamientos = array();
    $where = ' gabinete = ' . $idGabinete;
    $tratamientoGabinete = $this->GetTableDataByWhere('tratamiento_gabinete', $where);
    $this->CloseDB($link);
    if ($tratamientoGabinete != false)
    {
      for ($i = 0; $i < count($tratamientoGabinete); $i++)
      {
        $tratamientos[$i] = $this->buscar($tratamientoGabinete[$i]->tratamiento);
      }
    }
    return $tratamientos;
  }

  /**
   * Valida si un Tratamiento puede realizarse en determinado Gabinete.
   * @param type $idGabinete
   * @param type $idTratamiento
   * @return bool 
   */
  function validarGabinete($idGabinete, $idTratamiento)
  {
    $link = $this->OpenDB();
    $query = "SELECT COUNT(*) FROM tratamiento_gabinete WHERE gabinete = " . $idGabinete . " AND tratamiento = " . $idTratamiento;
    $resultado = $this->GetSQLFirstValue($query);
    $this->CloseDB($link);
    return $resultado > 0;
  }

  function listar()
  {
    $link = $this->OpenDB();
    $tratamientoObj = parent::listar();
    $tratamientos = "";
    foreach ($tratamientoObj as $tratamientoObj)
    {
      $tratamiento = new Tratamiento();
      $tratamiento->setNombre($tratamientoObj->nombre);
      $tratamiento->setDuracion($tratamientoObj->duracion);
      $tratamiento->setDescripcion($tratamientoObj->descripcion);
      $tratamiento->setPrecio($tratamientoObj->precio);
      $tratamiento->setId($tratamientoObj->idTratamiento);
      $tratamientos[] = $tratamiento;
    }
    $this->CloseDB($link);
    return $tratamientos;
  }

  function listarHabilitados()
  {
    $link = $this->OpenDB();
    $query = "SELECT idTratamiento, nombre FROM tratamiento WHERE deshabilitado = 0";
    $tratamientoObj = parent::listar();
    $tratamientos = "";
    foreach ($tratamientoObj as $tratamientoObj)
    {
      $tratamiento = new Tratamiento();
      $tratamiento->setId($tratamientoObj->idTratamiento);
      $tratamiento->setNombre($tratamientoObj->nombre);
      $tratamientos[] = $tratamiento;
    }
    $this->CloseDB($link);
    return $tratamientos;
  }

  function eliminar($id)
  {
    $link = $this->OpenDB();
    $this->beginTransaction();
    $eliminarGabinetes = "DELETE FROM tratamiento_gabinete WHERE tratamiento = " . $id;
    $result = $this->PostSQL($eliminarGabinetes);
    if ($result)
    {
      $eliminarTerapeutas = "DELETE FROM terapeuta_tratamiento WHERE tratamiento = " . $id;
      $result = $this->PostSQL($eliminarTerapeutas);
    }
    if ($result)
    {
      $eliminarProductos = "DELETE FROM tratamiento_producto WHERE tratamiento = " . $id;
      $result = $this->PostSQL($eliminarProductos);
    }
    if ($result)
    {
      $result = parent::eliminar($id);
    }
    if ($result)
    {
      $this->commitTransaction();
    } else
    {
      $this->rollbackTransaction();
    }
    $this->CloseDB($link);
    return $result;
  }

}

?>
